iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Mobile Development

從零開始的Swift開發心路歷程2系列 第 7

【從零開始的Swift開發心路歷程2-Day7】簡單的FMDB練習(5)-刪除資料

  • 分享至 

  • xImage
  •  

昨天介紹完了UIMenu,今天就來講刪除功能的實作吧!
是透過每筆資料獨立的id來進行刪除資料的動作

// 刪除資料
    func deleteData(id: String){
        if self.connectDB() {
            let deleteData = "DELETE FROM RESUME WHERE id = ?"
            
            if self.database.executeUpdate(deleteData, withArgumentsIn: [id]) {
                print("刪除資料成功")
            }else{
                print("刪除資料失敗")
                print(database.lastError(), database.lastErrorMessage())
            }
            self.database.close()
        }
    }

問題來了~那要怎麼知道被點擊的cell與資料id的關聯呢?
我們在cell的swift檔宣告了一個protocol,也要記得宣吿delegate

var delegate: ResumeTableViewCellListener?
var index = 0
protocol ResumeTableViewCellListener{
    func buttonClicked(buttonType: String, index: Int)
}

再去主畫面新增一個extension來實作這個protocol,根據按鈕類型的不同可以分別進行不同的動作,由於array和cell的index都是從0開始,故可以直接將其轉換,所以在case "delete"加上刪除資料的function就可以成功刪除資料了

extension MainVC: ResumeTableViewCellListener{
    func buttonClicked(buttonType: String, index: Int) {
        switch buttonType {
        case "details" :
            print("詳細資料")
        case "delete" :
            Database.shared.deleteData(id: resumeList[index].id)
            self.fetchData()
        default:
            break
        }
        
    }
}

要記得在tableView的cellForRowAt加上cell.delegate = self,這樣按下按鈕才會執行刪除動作哦

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ResumeTableViewCell",for: indexPath) as! ResumeTableViewCell
        cell.nameLabel.text = resumeList[indexPath.row].name
        cell.ageLabel.text = String(resumeList[indexPath.row].age)
        cell.delegate = self
        return cell
    }


明天就來實作如何修改資料吧!


上一篇
【從零開始的Swift開發心路歷程2-Day6】簡單的UIMenu
下一篇
【從零開始的Swift開發心路歷程2-Day8】簡單的FMDB練習(6)-修改資料
系列文
從零開始的Swift開發心路歷程230
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言